#ifndef _VECTOR_2_H_
#define _VECTOR_2_H_

class Vector2
{
	public:
			
		// constants
		static const Vector2 ZERO;
		static const Vector2 ONE;

	// object management
	public:
		Vector2	(void);									
		Vector2	(float x, float y);						
		Vector2	(const Vector2& rhs);					
		~Vector2(void);									

		// operators
		Vector2& operator=	(const Vector2& rhs);
		Vector2  operator+	(const Vector2& rhs) const;
		Vector2  operator-	(const Vector2& rhs) const;
		Vector2  operator*	(const float scalar) const;
		Vector2  operator/	(const float scalar) const;
		Vector2& operator+=	(const Vector2& rhs);
		Vector2& operator-=	(const Vector2& rhs);
		Vector2& operator*=	(const float scalar);
		Vector2& operator/=	(const float scalar);
		bool	 operator==	(const Vector2& rhs);	
		bool	 operator!=	(const Vector2& rhs);

		Vector2	 operator-	(void) const;

		// arithmetic operations
		Vector2 Add			(const Vector2 &rhs);
		Vector2 Subtract	(const Vector2 &rhs);
		Vector2 Multiply	(float scalar);
		Vector2 Divide		(float scalar);

		// other operations
		float		Length			(void) const;
		float		LengthSquared	(void) const;
		void		Normalize		(void);
		bool		Equals			(const Vector2 &v) const;

		//static methods
		static Vector2 Lerp				(const Vector2 &start, const Vector2 &end, float amount);
		static float   Distance			(const Vector2 &lhs, const Vector2 &rhs);
		static float   DistanceSquared	(const Vector2 &lhs, const Vector2 &rhs);
			
public:

		// member variables
		float X;
		float Y;

};

#endif // end of #ifndef _VECTOR2_H_
